/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.jjsoft.celularessuc.gco.neg;


import com.jjsoft.celularessuc.gco.util.CedulaInvalidaException;
import com.jjsoft.celularessuc.gco.util.Validacion;
import com.jjsoft.celularessuc.gco.util.ClienteValidadorException;
import com.jjsoft.celularessuc.gco.util.IdDuplicadoException;
import com.jjsoft.celularessuc.gco.util.ValidarAtributoUtil;
import com.jjsoft.celularessuc.gco.util.AtributoInvalidoException;
import com.jjsoft.celularessuc.gco.dao.GenericController;
import com.jjsoft.celularessuc.gco.mdl.Cliente;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Johnny
 */
public class ClienteManager {
    GenericController<Cliente> controladorCliente = new GenericController<Cliente>();
    public void crearCliente(Cliente cliente) throws ClienteValidadorException
    {
        try {
            ValidarAtributoUtil.validarObjetoNulo("Cliente", cliente);
            ValidarAtributoUtil.validarStringNuloVacio("Cedula", cliente.getCedula());
            ValidarAtributoUtil.validarStringNuloVacio("Nombres", cliente.getNombres());
            ValidarAtributoUtil.validarStringNuloVacio("Apellidos", cliente.getApellidos());
            Validacion.validadarCed_RUC(cliente.getCedula());
            if(controladorCliente.create(cliente).equals("1"))
            {
                throw new ClienteValidadorException(new IdDuplicadoException("Ya existe un cliente con ese número de identificación",cliente.getCedula()));
            }
        } catch (AtributoInvalidoException ex) {
            throw new ClienteValidadorException(ex);
        } catch (CedulaInvalidaException ex) {
            throw new ClienteValidadorException(new AtributoInvalidoException("Cedula", cliente.getCedula(),new CedulaInvalidaException("La cédula del Cliente no es Válida")));
        }    
    }
    public void editarCliente(Cliente cliente) throws ClienteValidadorException
    {
        try {
            ValidarAtributoUtil.validarObjetoNulo("Cliente", cliente);
            ValidarAtributoUtil.validarStringNuloVacio("Cedula", cliente.getCedula());
            ValidarAtributoUtil.validarStringNuloVacio("Nombres", cliente.getNombres());
            ValidarAtributoUtil.validarStringNuloVacio("Apellidos", cliente.getApellidos());
            controladorCliente.edit(cliente);
        } catch (AtributoInvalidoException ex) {
            throw new ClienteValidadorException(ex);
        }  catch (Exception ex) {
            throw new ClienteValidadorException("Error desconocido");
        }
    }
    public List<Cliente> listarClientes()
    {
        return controladorCliente.findWhere(new Cliente(), "estado=0 order by apellidos");
    }
    public List<Cliente> listarClientes(int ini, int max)
    {
        return controladorCliente.findWhere(new Cliente(), "estado=0 order by apellidos",ini,max);
    }
    
    public List<Cliente> listarClientes(String criterio)
    {
        List<Cliente> listaClientes=controladorCliente.findHibernateSearch(new Cliente(),criterio, "cedula", "nombres", "apellidos","email");
        for(int i=listaClientes.size();i>0;i--)
        {
            if(listaClientes.get(i-1).getEstado()==1)
                listaClientes.remove(i-1);
        }
        return listaClientes;
    }
    
    public void eliminarCliente(Cliente cliente)
    {
        cliente.setEstado(1);
        try {
            controladorCliente.edit(cliente);
        } catch (Exception ex) {
            Logger.getLogger(ClienteManager.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }
    public Cliente buscarPorCedula(String cedula)
    {
        try{
            Cliente cliente = controladorCliente.findWhere(new Cliente(), "cedula = '"+cedula +"' and estado=0").get(0);
            return cliente;
        }catch(Exception ex){return null;}
    }
    public int contarClientes()
    {
        return controladorCliente.getCount(new Cliente(),"estado=0");
    }
    
}
